<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <!-- 原型链 js 是一个面向对象的语言  封装,继承,多态
  原型和原型链的优势
提高代码的复用性：通过原型，可以将公共的属性和方法定义在原型对象中，所有对象可以共享使用，避免重复创建和占用内存。
提高代码的性能：通过原型链，可以避免重复定义和创建对象，减少内存占用和执行时间。
实现继承机制：通过原型链，可以实现对象之间的继承，子对象可以继承父对象的属性和方法，减少重复的代码。
  -->
  <script>
    // 原型链 解决了对象的继承问题
    function Person () {
      this.name = "张三"
    }
    function Student () {
      this.chool = "青芒"
    }
    let p = new Person()
    // 因为学生 是人的一种,所以学生也应该有名字
    Student.prototype = new Person()
    let stu = new Student()
    // console.log(p);
    // console.log(stu);

    // console.log(stu.__proto__);
    // console.log(Student.prototype);
    // console.log(Student.prototype===stu.__proto__);
    // // 获取构造函数
    // console.log(stu.constructor);

    let o = new Object()
    // console.log(Person.prototype.constructor);
    // console.log(Person.prototype.__proto__==o.__proto__);
    // console.log(Person.prototype.__proto__.constructor);
    // console.log(o.prototype.__proto__);

    console.log(Person.__proto__ == Function.prototype);
    console.log(Person.__proto__);
    // instanceof 判断的是 __
    console.log(stu instanceof Student);
    console.log(stu instanceof Person);
    console.log(stu instanceof Object);
    console.log(Function instanceof Function);
    console.log(Function.prototype instanceof Object);
  </script>
</body>

</html>